define(function(require,exports,module) {
    var myPub = require('./public');

    $(function() {
        var oBillingType = $('.js_billingType');		// 发票类型
        var oText = $('.js_Text');						// 输入框
        var oBillMobile = $('.js_billMobile');			// 手机输入框，电子发票的收票人手机号码外层的盒子
        var oBillMail = $('.js_billMail');				// 邮箱输入框，电子发票的收票人手机号码外层的盒子
        var oBillingHead = $('.js_billingHead'); 				// 发票抬头选择
        var oBillingContList = $('.js_billingContList'); 		// 普通商品发票内容选择
        var oBillingInfo = $('.js_billingInfo'); 				// 收票人信息，收票人的手机和邮箱
        var oSubmitApply = $('.js_submitApply');				// 提交，点击发票弹窗的‘使用’按钮；
        var oSubmitCancel = $('.js_submitCancel');				// 点击发票弹窗的‘不使用’按钮

        var oUseBillSide = $('.js_useBillSide');             // “开票”按钮
        var oDeleteInvoice = $('.js_deleteInvoice');       // “删除订单”按钮

        var oBillSide = $('.js_billSide');              // 发票弹框
        var oShadow = $('.js_shadow');                  // 发票弹框顶部的阴影
        var oBllingText = $('.js_billingText');      // 发票信息展示
        // var $isJifen = $('#isJifen');                // 已经与后台沟通，能不能开票只依照后台返回参数为准，前台不做额外判断，判断是否是积分商品
        // var $oJifen = $('.js_isJifen');             // 已经与后台沟通，能不能开票只依照后台返回参数为准，前台不做额外判断，如果是积分商品，隐藏“发票信息”
        // var $ljkType = $('.ljkType');               // 已经与后台沟通，能不能开票只依照后台返回参数为准，前台不做额外判断，选中礼品卡
        var bSideOff = true;                           // 点击使用和不使用按钮时的节流开关；
        var sType = '[1]';                               // 后台传递发票类型 [0,1],[0],[1], sType 是字符串；已写死；
        var orderSn = oUseBillSide.attr("orderSn");     // 后台传递当前订单编号
        var moveHeight = oBillSide.outerHeight(true);    // 发票弹框高度，包含margin ，padding，border；
        var mobile = $('.js_mobile').val();               // 电子发票的收票人手机号码，手机输入框 input 值，未隐藏处理手机号时先保存完整手机号；

        var pageRefresh = null;                         // 页面自动刷新的倒计时

        // invoice_Status 表示可不可以显示“开票”按钮，如果 invoice_Status 为 true 则显示; 如果 invoice_Status 为 false 则不显示；
        if (!invoice_Status) {
            oDeleteInvoice.show();
            oUseBillSide.hide();
        } else {

            if (orderType != 'PREPAICARDSHOP' && isJifen != true ) {
                oDeleteInvoice.hide();
                oUseBillSide.show();
                // 原有是积分商品就去掉“发票信息”。我添加多一条件判断，如果发票类型 sType 为 null 或者 长度为 0 ，那直接隐藏开票按钮；
                // 因为在订单详情页中的 sType 是写死的 ['1'] 故不用多判断 sType 是否为空或长度为 0 的情况，
                // 改成 else 是为了当“开票”按钮不符合条件而隐藏的时候显示“删除订单”按钮；
            }  else  {
                oDeleteInvoice.show();
                oUseBillSide.hide();
            }
        }

        oBillSide.css({'bottom': -moveHeight });


        function OnlyBillType(sType) {
            var _Li = oBillingType.find('li');
            // 判断禁止发票类型，如果返回的类型没有这个类型的发票，则除去这个发票选项，原有这个类型添加暗体文字和边框，新需求需要除去整一个的选项dom;
            _Li.each(function (i) {
                if( sType.indexOf(_Li.eq(i).attr('billType')) <= 0 ){
                    _Li.eq(i).addClass('unactive');
                    _Li.eq(i).attr("style","display: none;");
                }

                //  如果只有一个发票类型，因为默认选中的是“普通发票”，所以当只有一个发票类型且发票类型为“电子发票”，则默认发票类型改为“电子发票”
                if( sType.indexOf(_Li.eq(i).attr('billType')) >= 0 && sType.length == 3 ){
                    oBillingType.find('li').removeClass('active');
                    $(this).addClass('active');
                    if ( _Li.eq(i).attr('billType') == '1' ) {
                        oBillingInfo.show();
                    }
                }
            });
        }

        //验证地址是否选择
        // function checkAddress() {
        //     var address = $('#province').html();
        //     if (null != address && "" != address) {
        //         return true;
        //     } else {
        //         return false;
        //     }
        // }

        // 发票弹框显示。点击发票信息，如果有填写地址，当点击“发票信息”的时候就显示弹窗且请求当前收货人手机号的公司名称和纳税人识别号，如果有就返回赋值默认显示；
        oUseBillSide.hammer().on('tap', function () {
            // if($ljkType.hasClass('active')){
            //     return;
            // }

            // if(!checkAddress()) {
            //     myPub.TipLayer('请您先填写地址信息！')
            //     return;
            // }
            if (!bSideOff) return;

            bSideOff = false;
            OnlyBillType(sType);
            var companyName = $("#companyName").val();
            var taxpayerCode = $("#taxpayerCode").val();
            if (companyName == null || companyName == '' || taxpayerCode == null || taxpayerCode == ''){
                G_JSON_GET(base+'/m/o/1.0/invoiceInfo/get',{
                    mobile:mobile
                },function (data) {
                    if(data.ret.code == 0){
                        $("#companyName").val(data.data.companyName);
                        $("#taxpayerCode").val(data.data.taxCode);
                    }
                });
            }
            // 发票弹框先显示，然后停止所有动画，然后由下往上移动直到 bottom 为 0 即停止，然后弹框阴影显示，然后节流开关打开；同时阻止元素冒泡；
            oBillSide.show().stop().animate({ 'bottom':0 },300,function() {
                oShadow.show();
                bSideOff = true
            });
            //阻止 hammer 冒泡；
            myPub.HamstopPropaga();
        });

        // 点击弹框阴影关闭发票弹框；
        oShadow.hammer().on('tap', function () {
            //隐藏服务
            HideBillSide();
            myPub.HamstopPropaga();
        });

        // 发票弹框关闭
        function HideBillSide(fn) {
            oBillSide.stop().animate({bottom:-moveHeight},300,function(){
                oBillSide.hide();
                oShadow.hide();
                // $('html').removeClass('bodyHeight100');
                bSideOff = true
                if(fn)fn();
            });
        }


        // 手机号中间隐藏4位数
        if(oBillMobile.find('.js_mobile').length>0){
            HideNum(oBillMobile.find('.js_mobile'));
        }

        // 表格显示和隐藏清除按钮
        oText.on('input propertychange',function(){
            var _val = $(this).val();
            var oClearBtn = $(this).siblings('.js_clearBtn');
            _val == '' ? oClearBtn.hide(): oClearBtn.show();
        });

        // 手机验证
        oBillMobile.find('input').on('input propertychange',function(){
            var _val = $(this).val();
            if( checkPhoneNumber(_val) ) {
                oBillMobile.removeClass('has_error').addClass('has_success')
            }
            else {
                oBillMobile.addClass('has_error').removeClass('has_success')
            }
        });

        //邮箱验证
        oBillMail.find('input').on('input propertychange', function () {
            var _val = $(this).val();
            if(checkMail(_val)) {
                oBillMail.removeClass('has_error').addClass('has_success')
            }
            else {
                oBillMail.addClass('has_error').removeClass('has_success')
            }
        });

        // 发票类型选择，当是电子发票的时候显示“收票人信息”（收票人电话和邮箱）
        oBillingType.find('li').hammer().on('tap', function () {
            // 判断是否是禁止的
            if($(this).hasClass('unactive')) return;
            oBillingType.find('li').removeClass('active');
            $(this).addClass('active');
            if($(this).attr('billType')== '0'){
                oBillingInfo.hide();
            }else{
                oBillingInfo.show();
            }
        });

        // "抬头发票" 个人和公司 选择，如果是选“公司”则显示公司的名称和纳税人识别号；
        oBillingHead.find('li').hammer().on('tap', function () {
            oBillingHead.find('li').removeClass('active');
            $(this).addClass('active');
            if($(this).attr('billHead') == 'company') {
                oBillingHead.find('.js_companyBill').show();
                return
            }
            oBillingHead.find('.js_companyBill').hide();
        });

        // "普通商品发票内容" 选择，现只存在“明细”一项
        oBillingContList.find('li').hammer().on('tap', function () {
            oBillingContList.find('li').removeClass('active');
            $(this).addClass('active');
        });

        // 如果是“公司发票”则点击使用的时候需要先发送发票数据到这个接口，再随着整张订单发送到后台。如果是“普通发票”则只随着整张订单发送到后台；
        function submitInvoiceInfo(mobile,companyName,taxCode) {
            G_JSON_POST(base+'/m/o/1.0/invoiceInfo/modify',{
                mobile:mobile,
                companyName:companyName,
                taxCode:taxCode
            },function (date) {
            })
        };

        //  新增的单独的“电子发票”发送数据
        function submitElectronicInvoice(invoiceData) {
            G_JSON_POST(base+'/m/o/1.0/orderInvoice/patch',invoiceData
                ,function (date) {
                if (date.ret.code == '0' && date.ret.message == 'SUCCESS') {
                    myPub.TipLayer('恭喜你，已成功开票！');
                    clearTimeout(pageRefresh);
                    pageRefresh = setTimeout(function() {
                        window.location.href = window.location.href;
                    }, 1000);

                } else if (date.ret.code == '60040' && date.ret.message == '订单已开过发票') {
                    myPub.TipLayer('该订单已开过发票！');
                }
            })
        };



        // 提交
        oSubmitApply.hammer().on('tap', function () {
            // 发票类型的属性
            var _oBillType = oBillingType.find('li.active').attr('billType');   //  当前选中的发票类型；
            var itype= $('.js_billingType li.active').attr('value');            //  发票类型信息
            var ihead= $('.js_billingHead li.active').attr('value');            //  发票抬头信息
            var icontent=$('.js_billingContList li.active').children('span:eq(1)').html();  // 普通商品发票内容；
            var companyName=$('#companyName').val();                // 公司全称；
            var taxCode=$('#taxpayerCode').val();                   // 纳税人识别码；
            var imobile=$('#billMobile').val();                     // 收票人手机号码；
            if(imobile.indexOf("*")>0){
                imobile = mobile;
            }

            var iemail=$('#billElectron').val();


            // 普通发票
            if (_oBillType == '0') {
                // 判断当前的发票抬头是“个人发票”还是“公司发票”；
                checkBillHead(function () {
                    // 检测发票内容，目前并没有提供选择项，现只有默认固定的“普通发票内容”；
                    checkContentNull(function () {
                        HideBillSide();
                        oBllingText.text('个人普通发票')
                        var invoice = {"itype": parseInt(itype), "ihead": parseInt(ihead), "icontent": icontent};
                        $('#invoice').val(JSON.stringify(invoice));
                    })
                }, function () {
                    // 如果“发票抬头”为公司，则检测公司名称和纳税人识别号是否存在；
                    checkCompanyInfo(function () {
                        checkContentNull(function () {
                            HideBillSide();
                            oBllingText.text('公司普通发票');
                            var invoice = {
                                "itype": parseInt(itype),
                                "ihead": parseInt(ihead),
                                "icontent": icontent,
                                "companyName": companyName,
                                "taxCode": taxCode
                            };
                            submitInvoiceInfo(imobile,companyName,taxCode);
                            $('#invoice').val(JSON.stringify(invoice));
                        })
                    })
                });
            } else if (_oBillType == '1') {
                // 电子发票
                checkBillHead(function () {
                    checkContentNull(function () {
                        // 如果是电子发票，则检测电子发票的收票人输入框和邮箱是否为空
                        checkMobileNull(function () {
                            HideBillSide();
                            // oBllingText.text('个人电子发票');
                            var invoice = {
                                "orderSn": orderSn,
                                "itype": parseInt(itype),
                                "ihead": parseInt(ihead),
                                "icontent": icontent,
                                "imobile": imobile,
                                "iemail": iemail,
                            };
                                // orderSn: invoiceData.orderSn,
                                // orderId: invoiceData.orderId,    订单 id 没有可以不用传
                                // itype: invoiceData.itype,
                                // ihead: invoiceData.ihead,
                                // icontent: invoiceData.icontent,
                                // imobile: invoiceData.mobile,
                                // companyName: invoiceData.companyName,    公司名称 没有可以不用传
                                // taxCode: invoiceData.taxCode,            公司纳税人识别号 没有可以不用传
                                // iemail: invoiceData.iemail,

                            submitElectronicInvoice(invoice);
                            // $('#invoice').val(JSON.stringify(invoice));
                        });
                    })
                }, function () {
                    checkCompanyInfo(function () {
                        checkContentNull(function () {
                            checkMobileNull(function () {
                                HideBillSide();
                                // oBllingText.text('公司电子发票');
                                var invoice = {
                                    "orderSn": orderSn,
                                    "itype": parseInt(itype),
                                    "ihead": parseInt(ihead),
                                    "icontent": icontent,
                                    "companyName": companyName,
                                    "taxCode": taxCode,
                                    "imobile": imobile,
                                    "iemail": iemail
                                };

                                submitElectronicInvoice(invoice);

                                // submitInvoiceInfo(imobile,companyName,taxCode);
                                // $('#invoice').val(JSON.stringify(invoice));
                            })
                        })
                    });
                });
            }
        });

        // 不使用发票
        oSubmitCancel.hammer().on('tap', function () {
            HideBillSide();
            // $('#invoice').val("");
            // oBllingText.html("添加发票信息");
        });

        // 检测发票抬头类型是 公司还是个人
        function checkBillHead(argPerson, argCompany) {
            // 发票抬头类型
            var _oBillHead = oBillingHead.find('li.active').attr('billHead');
            if (_oBillHead == null || _oBillHead == "") {
                myPub.TipLayer('请选择发票抬头！')
            }
            if (_oBillHead == 'person') {
                if (argPerson) argPerson();
            }
            else if (_oBillHead == 'company') {
                if (argCompany) argCompany();
            }
        }

        //检测发票内容
        function checkContentNull(fn) {
            var content = $('.js_billingContList li.active').children('span:eq(1)').html();
            if (content == null || content == "") {
                myPub.TipLayer('请选择发票内容！')
            } else {
                if (fn) fn()
            }
        }

        // 检测“发票抬头”为公司时，公司名和纳税人识别号是否为空， 输入框是否为空
        function checkCompanyInfo(fn) {
            var _oCompanyBillInput = oBillingHead.find('.js_companyBill input');
            if (_oCompanyBillInput.eq(0).val() == '') {
                myPub.TipLayer('请输入您的公司名称！')
            }
            else if (_oCompanyBillInput.eq(1).val() == '') {
                myPub.TipLayer('请输入纳税人识别码！')
            }
            else {
                if (fn) fn()
            }
        }

        // 检测电子发票的收票人输入框和邮箱是否为空
        function checkMobileNull(fn) {
            var _mobile = oBillMobile.find('input').val();
            var _email = oBillMail.find('input').val();
            if (_mobile == '') {
                myPub.TipLayer('请输入您的手机号码！')
            } else if (!checkPhoneNumber(_mobile)) {
                myPub.TipLayer('请输入正确的手机号码！')
            }
            else if ( _email == "") {
                myPub.TipLayer('请输入您的邮箱！')
            }
            else if (!checkMail(_email) && _email != "") {
                myPub.TipLayer('请输入正确的邮箱！')
            }
            else {
                if (fn) fn()
            }
        }
        // 校验电话号码
        function checkPhoneNumber(v) {
            var regMobile = /^1[3|4|5|7|8]\d{9}$/;   //验证手机号码
            var regPhone = /^(^0\d{2}-?\d{8}$)|(^0\d{3}-?\d{7}$)|(^\(0\d{2}\)-?\d{8}$)|(^\(0\d{3}\)-?\d{7}$)$/;   //验证固定电话
            if (regMobile.test(v) || regPhone.test(v) || HidePhone(mobile)==v) {
                return true;
            }
            return false;
        }

    });




    // 校验邮箱
    function checkMail(v) {
        var regMail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,29})+$/;
        if (regMail.test(v)) {
            return true
        }
        return false;
    }

    // 隐藏手机中间4位
    function HideNum(obj) {
        var phone = obj.val();
        var mphone = phone.substr(3,4);
        var lphone = phone.replace(mphone,"****");
        obj.attr("value", lphone);
    }
    function HidePhone(phone) {
        var mphone = phone.substr(3,4);
        var lphone = phone.replace(mphone,"****");
        return lphone;
    }

});